home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-01-14 | 6.0 KB | 251 lines | [TEXT/MPS ] |
- /* _________________________________________________________________________________________________________ //
- Copyright © 1992-93 Apple Computer, Inc. All rights reserved.
- Macintosh Developer Technical Support.C++ Macintosh Toolbox Framework.
- Programmer: Kent Sandvik
- Date: 11/7/92
- Revision comments are at the end of this file.
- ---
- The following collection classes are implemented: TLinkedList, TStack, (TQueue, TDeQueue),
- THashTable.
- CollectionClasses.cp contains the collection class member functions.
- _________________________________________________________________________________________________________ */
-
- #ifndef _COLLECTION
- #include "CollectionClasses.h"
- #endif
-
- // FLAGS that will enable/disable tests
- //#define TLINKEDLIST
- //#define TSTACK
- //#define TQUEUE
- #define TDEQUE
- //#define THASHTABLE
-
- void DoSomething(THashEntryPtr p); // our MapCar test function
-
-
- void main(void)
- {
- cout << "Start of collection class tests…\n";
-
- // _________________________________________________________________________________________________________ //
- // TLINKEDLIST TEST
-
- #ifdef TLINKEDLIST
- cout << "\nTest1: TLinkedList test…\n";
-
- // Create a TLinkedList
-
- TLinkedList myList;
-
- // Append elements to the list
-
- myList.Append(1);
- myList.Append(2);
- myList.Append(3);
- myList.Append(4);
- // Show values in list
- myList.Reset();
- long val;
- while ((val = myList.Next()) != NULL)
- cout << "TLinkedList Entry = " << val << "\n";
-
- // Show first entry
- cout << "First entry = " << myList.First() << "\n";
-
- // Show last entry
- cout << "Last entry = " << myList.Last() << "\n";
-
- // Try to find entry
- cout << "Trying to find entry 3…\n";
- Boolean OK = myList.Find(3);
- if (OK)
- cout << "We found 3, OK!\n";
- else
- cout << "Ouch, problems, time to debug…";
-
-
- // Remove two entries, 2 and 4
- myList.Remove(2);
- myList.Remove(4);
- cout << "Removed 2 and 4, list looks now like:\n";
- myList.Reset();
- while ((val = myList.Next()) != NULL)
- cout << "TLinkedList Entry = " << val << "\n";
-
- #endif
-
- // _________________________________________________________________________________________________________ //
- // TSTACK TEST
-
- #ifdef TSTACK
- // TSTACK TEST PHASE
- cout << "Test2: test TStack:\n";
-
- TStack myStack;
-
- myStack.Push(1 L);
- myStack.Push(2 L);
- myStack.Push(3 L);
- myStack.Push(4 L);
- myStack.Push(5 L);
-
- // test our linked list properties
- cout << "First entry = " << myStack.First() << "\n";
- cout << "Last entry = " << myStack.Last() << "\n";
-
- // test our next loop
- myStack.Reset();
- long val;
- while ((val = myStack.Next()) != NULL)
- cout << "Entry = " << val << "\n";
-
-
- // test Find
- long item1 = 4 L;
- long item2 = 44 L;
- Boolean outcome;
-
- outcome = myStack.Find(item1);
- if (outcome)
- cout << "We have item1 in queue\n"; // should trigger
- else
- cout << "We don't have item1 in queue\n";
-
- outcome = myStack.Find(item2);
- if (outcome)
- cout << "We have item2 in queue\n";
- else
- cout << "We don't have item2 in queue\n"; // should trigger
-
-
- // test out stack properties
- while (!myStack.IsEmpty())
- cout << "Popping from the stack, value = " << myStack.Pop() << "\n";
-
- cout << "End of TStack test!\n";
-
- #endif
-
- // _________________________________________________________________________________________________________ //
- // TQUEUE TEST
-
- #ifdef TQUEUE
- cout << "\nTest3: TQueue test…\n";
-
- // Create TQueue
- TQueue myQueue;
-
- // Place stuff in the queue
- myQueue.Put(10);
- myQueue.Put(20);
- myQueue.Put(30);
- myQueue.Put(40);
-
-
- // Test out .Last()
- cout << "Last, or actually the first pushed entry is = " << myQueue.Last() << "\n";
-
- // get out 2 more values
- cout << " Get = " << myQueue.Get();
- cout << " Get = " << myQueue.Get();
- cout << "\nI will get out two more values, and the next last value is 30 = " << myQueue.Last() << "\n";
-
-
- // Get Stuff from queue
-
- while (!myQueue.IsEmpty())
- cout << "Get values from the queue, value = " << myQueue.Get() << "\n";
-
- #endif
-
- // _________________________________________________________________________________________________________ //
- // TDEQUE TEST
-
- #ifdef TDEQUE
- cout << "\nTest4: TDeque test…\n";
-
- // Create TDeque
- TDeque myDeque;
-
- // Place stuff at end of deque
- myDeque.Push(11);
- myDeque.Push(12);
- myDeque.Push(13);
- myDeque.Push(14);
-
- myDeque.PutAtEnd(21);
- myDeque.PutAtEnd(22);
-
- cout << "Pop (14) = " << myDeque.Pop() << "\n";
- cout << "Pop (13) = " << myDeque.Pop() << "\n";
- cout << "Get (22) = " << myDeque.Get() << "\n";
-
- cout << "The list should now look like: 21 11 12\n";
-
- // empty the deque
- while (!myDeque.IsEmpty())
- cout << "Get values from the dequeue, value = " << myDeque.Get() << "\n";
-
- #endif
-
-
- // _________________________________________________________________________________________________________ //
- // THASHTABLE TEST
-
- #ifdef THASHTABLE
- // THASHTABLE TEST PHASE
- cout << "\nTest6: THashTable test…\n";
-
- // Create Hashtable.
- THashTable myHashTable;
-
- // Add entries to the Hashtable.
- myHashTable.Add(4, 100);
- myHashTable.Add(5, 400);
- myHashTable.Add(6, 500);
-
- // Find entry/value in HashTable
-
- long tableValue = myHashTable.Find(4);
- cout << "The value is " << tableValue << ", and should be 100\n";
-
- // remove this entry
- myHashTable.Remove(4);
-
- // now try to find it, and signal we had problems
- TItemtype entry = myHashTable.Find(4);
- if (entry == 0)
- cout << "THashTable.Remove() seems to work fine!\n";
- else
- cout << "Eh, a value, and we just deleted the entry, start debugging THashTable.Remove()!\n";
-
- // MapCar test
- myHashTable.MapCar((MapFun)DoSomething);
-
- cout << "End of THashTable test…\n";
- #endif
-
- cout << "End of collection class tests!\n";
- }
-
-
- // This function is needed for the THashTable.MapCar test
- void DoSomething(THashEntryPtr p)
- {
- // print out the value inside each THashEntryPtr…
- cout << "Hash Table entry = " << p->fValue << "\n";
- }
-
-
- // _________________________________________________________________________________________________________ //
-
-
- /* Change History (most recent last):
- No Init. Date Comment
- 1 khs 11/7/92 New file
- 2 khs 11/28/92 Added TLinkedList
- 3 khs 11/29/92 Added TQueue and TDeque
- 4 khs 1/14/93 Cleanup
- */
-